package br.com.klis.batendoumabola.client.widgets;

import br.com.klis.batendoumabola.client.event.GaleriaAtualizadaEvent;
import br.com.klis.batendoumabola.client.event.GaleriaAtualizadaEventHandler;
import br.com.klis.batendoumabola.client.service.ImagemDoBateBolaService;
import br.com.klis.batendoumabola.client.service.ImagemDoBateBolaServiceAsync;
import br.com.klis.batendoumabola.client.util.Helper;
import br.com.klis.batendoumabola.shared.DadosDaImagem;
import br.com.klis.batendoumabola.shared.ImagemUrl;
import br.com.klis.batendoumabola.shared.LoginInfo;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.event.shared.HasHandlers;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.VerticalPanel;

public class ImagemRealPanel extends Composite implements HasHandlers {
	
	private final DialogBox tela = new DialogBox(true);
	private final ImagemDoBateBolaServiceAsync imageService = GWT.create(ImagemDoBateBolaService.class);
	private DadosDaImagem dados;
	private LoginInfo loginInfo;
	private Galeria galeria;
	private Button botaoExcluir = new Button("Excluir Imagem");

	public ImagemRealPanel(LoginInfo loginInfo, DadosDaImagem dados, Galeria galeria) {
		handlerManager = new HandlerManager(this);
		this.loginInfo = loginInfo;
		this.dados = dados;
		this.galeria = galeria;
	}
	
	public void show(){
		VerticalPanel imagePanel = new VerticalPanel();
		imagePanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
	
		botaoExcluir.setStyleName("botao");
		botaoExcluir.addClickHandler(new ClickHandler() {
		@Override
		public void onClick(ClickEvent event) {
			imageService.delete(dados, new AsyncCallback<Boolean>() {
				public void onSuccess(Boolean result) {
					if (result){
						GaleriaAtualizadaEvent event = new GaleriaAtualizadaEvent(dados.getBateBolaId());
						fireEvent(event);
						tela.hide();
					}else{
						Window.alert("A imagem não foi excluída");
					}
				}

				public void onFailure(Throwable error) {
					Helper.handleError(error,loginInfo);
				}
			});}
		});
	
		Image imagemReal = new Image();
		//imagemReal.setUrl(ImagemUrl.url+dados.getId());
		/*String url = ImagemUrl.customUrl;
		url = url.replace("{imageId}", dados.getId().toString());
		 
		
		url = url.replace("{width}","500");
		url = url.replace("{height}","500");*/
		String url = ImagemUrl.url+dados.getId();
		GWT.log("URL: "+url);
		imagemReal.setUrl(url);
		
		
		imagePanel.add(imagemReal);
		
		  Button botaoFechar = new Button("Fechar");
		  botaoFechar.setStyleName("botao");
	      botaoFechar.addClickHandler(new ClickHandler() {
	    	  @Override
	    	  public void onClick(ClickEvent event) {
	    		  tela.hide();
	    	  }
	      });
	      HorizontalPanel barraDeComandos = new HorizontalPanel();
	      barraDeComandos.add(botaoFechar);	
	      if (galeria.getEnabled()){
	    	  barraDeComandos.add(botaoExcluir);
	      }
	      imagePanel.add(barraDeComandos);
		
		/*imagePopup.setAnimationEnabled(true);
		imagePopup.setWidget(imagePanel);
		imagePopup.setGlassEnabled(true);
		imagePopup.setAutoHideEnabled(true);
		
		imagePopup.show();
		imagePopup.center();*/
		// Set the dialog box's caption.
		
	    tela.setText(dados.getFileName());
	    tela.setGlassEnabled(true);
	    tela.setAutoHideEnabled(false);
	    tela.setWidget(imagePanel);
	    tela.setModal(false);
	    /*GWT.log("Tamanho da imagem = Height: "+dados.getHeight());
	    GWT.log("Tamanho da imagem = Width: "+dados.getWidth());*/
	    imagePanel.setSize(dados.getWidth()+"px", dados.getHeight()+"px");
	    /*GWT.log("--------------------------------------------------");
	    GWT.log("Tela.getAbsoluteTop: "+tela.getAbsoluteTop());
	    GWT.log("Tela.getAbsoluteLeft: "+tela.getAbsoluteLeft());
	    GWT.log("Tela.getPopupTop: "+tela.getPopupTop());
	    GWT.log("Tela.getPopupLeft: "+tela.getPopupLeft());*/
	    tela.center();
	    /*GWT.log("Tela.getAbsoluteTop Depois do Center: "+tela.getAbsoluteTop());
	    GWT.log("Tela.getAbsoluteLeft Depois do Center: "+tela.getAbsoluteLeft());
	    GWT.log("Tela.getPopupTop Depois do Center: "+tela.getPopupTop());
	    GWT.log("Tela.getPopupLeft Depois do Center: "+tela.getPopupLeft());
	    int top = (Window.getClientHeight() - imagePanel.getOffsetHeight()) / 2;
	    int left = (Window.getClientWidth() - imagePanel.getOffsetWidth()) / 2;
	    GWT.log("Window.getClientWidth: "+Window.getClientWidth());
	    GWT.log("Window.getClientHeight: "+Window.getClientHeight());
	    GWT.log("imagePanel.getOffsetHeight: "+imagePanel.getOffsetHeight());
	    GWT.log("imagePanel.getOffsetWidth: "+imagePanel.getOffsetWidth());
	    GWT.log("top: "+top);
	    GWT.log("left: "+left);
	    GWT.log("Tamanho da Imagem - Height: "+imagemReal.getHeight());
	    GWT.log("Tamanho da Imagem - Width: "+imagemReal.getWidth());
	    GWT.log("--------------------------------------------------");
	    //tela.setPopupPosition(tela.getAbsoluteLeft(), tela.getAbsoluteTop());
	    GWT.log("Window scrolltop: "+Window.getScrollTop());
	    int leftcalc = (Window.getClientWidth()/2 - 200);
	    GWT.log("Calc width: "+leftcalc);
	    int topcalc = (Window.getClientHeight()/2 - 200);
	    GWT.log("Calc height: "+topcalc);
	    //tela.setPopupPosition(leftcalc, topcalc);
*/	}
	
	private HandlerManager handlerManager;
	@Override
	public void fireEvent(GwtEvent<?> event) {
		handlerManager.fireEvent(event);
	}

	public HandlerRegistration addGaleriaAtualizadaEventHandler(
			GaleriaAtualizadaEventHandler handler) {
		return handlerManager.addHandler(GaleriaAtualizadaEvent.TYPE, handler);
	}

}
